package br.com.serctam.session;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.criterion.Restrictions;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Begin;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Out;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.framework.EntityQuery;
import org.jboss.seam.persistence.HibernateSessionProxy;

import br.com.serctam.entity.Candidato;
import br.com.serctam.entity.Cargo;
import br.com.serctam.entity.Concurso;

@Scope(ScopeType.CONVERSATION)
@Name("candidatoList")
public class CandidatoList extends EntityQuery<Candidato> implements Serializable
{
	

	/**
	 * 
	 */
	private static final long serialVersionUID = -5199359443948854660L;

	@In(create=true)
	private CargoList cargoList;
	
	@In
	private HibernateSessionProxy hibernateSession;
	
	@Out
	private List<Candidato> candidatos;
	
	public Concurso concurso;
	private String numeroPreInscrisao;
	private Date dataNascimento;
	private String nomeCandidato;
	private String cpfCandidato;
	public Cargo cargo;
	
	
    public Concurso getConcurso() {
		return concurso;
	}


	public void setConcurso(Concurso concurso) {
		this.concurso = concurso;
	}


	public CandidatoList()
    {
        setEjbql(" select candidato from Candidato candidato order by candidato.nome ");
        candidatos = new ArrayList<Candidato>(0);
    }
	

	

	@Begin(join=true)
	public void buscar(){
		
		Criteria crt =  hibernateSession.createCriteria(Candidato.class);
		
		if( numeroPreInscrisao != null && !numeroPreInscrisao.equals("")){
			crt.add(Restrictions.eq("numeroPreInscrisao", numeroPreInscrisao));
		}
		
		if( nomeCandidato != null && !nomeCandidato.equals("")){
			crt.add(Restrictions.like("nome", "%"+nomeCandidato+"%"));
		}
		
		if( cpfCandidato != null && !cpfCandidato.equals("")){
			//String cpfSemMascara = cpfCandidato.replaceAll("\\.", "").replaceAll("-", "");
			crt.add(Restrictions.eq("cpf", cpfCandidato));
		}
		
		if ( cargoList.getConcurso() != null) {
			crt.createCriteria("cargo").add(Restrictions.eq("concurso", cargoList.getConcurso()));
		}
		
		if ( cargo != null) {
			crt.add(Restrictions.eq("cargo", cargo));
			
		}
		
		
		candidatos = crt.list();
		
    }


	public List<Candidato> getCandidatos() {
		return candidatos;
	}


	public void setCandidatos(List<Candidato> candidatos) {
		this.candidatos = candidatos;
	}


	public String getNumeroPreInscrisao() {
		return numeroPreInscrisao;
	}


	public void setNumeroPreInscrisao(String numeroPreInscrisao) {
		this.numeroPreInscrisao = numeroPreInscrisao;
	}


	public Date getDataNascimento() {
		return dataNascimento;
	}


	public void setDataNascimento(Date dataNascimento) {
		this.dataNascimento = dataNascimento;
	}


	public String getNomeCandidato() {
		return nomeCandidato;
	}


	public void setNomeCandidato(String nomeCandidato) {
		this.nomeCandidato = nomeCandidato;
	}


	public Cargo getCargo() {
		return cargo;
	}


	public void setCargo(Cargo cargo) {
		this.cargo = cargo;
	}


	public CargoList getCargoList() {
		return cargoList;
	}


	public void setCargoList(CargoList cargoList) {
		this.cargoList = cargoList;
	}


	public String getCpfCandidato() {
		return cpfCandidato;
	}


	public void setCpfCandidato(String cpfCandidato) {
		this.cpfCandidato = cpfCandidato;
	}
}
